import pytest

from helpers.cluster import ClickHouseCluster

cluster = ClickHouseCluster(__file__)
instance = cluster.add_instance("instance")


@pytest.fixture(scope="module", autouse=True)
def setup_nodes():
    try:
        cluster.start()

        instance.query("CREATE USER sasha")
        instance.query("CREATE USER masha IDENTIFIED BY 'qwerty'")

        yield cluster

    finally:
        cluster.shutdown()


def test_authentication_pass():
    assert instance.query("SELECT currentUser()", user="sasha") == "sasha\n"
    assert (
        instance.query("SELECT currentUser()", user="masha", password="qwerty")
        == "masha\n"
    )

    # 'no_password' authentication type allows to login with any password.
    assert (
        instance.query("SELECT currentUser()", user="sasha", password="something")
        == "sasha\n"
    )
    assert (
        instance.query("SELECT currentUser()", user="sasha", password="something2")
        == "sasha\n"
    )


def test_authentication_fail():
    # User doesn't exist.
    assert "vasya: Authentication failed" in instance.query_and_get_error(
        "SELECT currentUser()", user="vasya"
    )

    # Wrong password.
    assert "masha: Authentication failed" in instance.query_and_get_error(
        "SELECT currentUser()", user="masha", password="123"
    )
